package com.dvdfe8.crochet.controlador;

import com.dvdfe8.crochet.modelo.entity.Linea;
import com.dvdfe8.crochet.modelo.entity.Pedido;
import com.dvdfe8.crochet.modelo.service.AmigurumiService;
import com.dvdfe8.crochet.modelo.service.ClienteService;
import com.dvdfe8.crochet.modelo.service.LineaService;
import com.dvdfe8.crochet.modelo.service.PedidoService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author David
 */
@Controller
@RequestMapping("/pedido")
public class PedidoController {

    @Autowired
    PedidoService pedidoService;

    @Autowired
    ClienteService clienteService;
    
    @Autowired
    AmigurumiService amigurumiService;
    
    @Autowired
    LineaService lineaService;
    
    @RequestMapping("/")
    public String pedido(){
        return "redirect:listar";
    }
    
    @RequestMapping("/nuevo")
    public ModelAndView nuevo() {
        ModelAndView mav = new ModelAndView("pedido/edit");
        Pedido pedido = new Pedido();
        List clientes = clienteService.listarTodos();
        mav.addObject("clientes", clientes);
        mav.addObject("pedido", pedido);
        return mav;
    }

    @RequestMapping("/crear")
    public String crear(@ModelAttribute Pedido pedido, BindingResult result) {
        if (result.hasErrors()) {
            return "redirect:nuevo";
        }
        pedidoService.crear(pedido);
        List ped = pedidoService.listarTodos();
        Pedido p = (Pedido)ped.get(ped.size()-1);
        return "redirect:/pedido/lineas/?id="+p.getId();
    }    
    
    @RequestMapping("/listar")
    public ModelAndView listar() {
        ModelAndView mv = new ModelAndView("pedido/listado");
        List<Pedido> pedidos = pedidoService.listarTodos();
        mv.addObject("pedidos", pedidos);
        return mv;
    }
    
    @RequestMapping("/mostrar")
    public ModelAndView mostrar(@RequestParam int id){
        ModelAndView mv = new ModelAndView("pedido/datos");
        Pedido pedido = pedidoService.getPedidoById(id);
        mv.addObject("pedido", pedido);       
        return mv;
    }

    @RequestMapping("/lineas")
    public ModelAndView lineas(@RequestParam int id){
        ModelAndView mv = new ModelAndView("pedido/lineas");
        Pedido pedido = pedidoService.getPedidoById(id);
        mv.addObject("pedido",pedido);
        return mv;
    }
    
    @RequestMapping("/eliminar")
    public String eliminar(@RequestParam int id){
        Pedido pedido = pedidoService.getPedidoById(id);
        pedidoService.eliminar(pedido);
        return "redirect:/pedido/listar";
    }
    
    @RequestMapping("/lineas/eliminar")
    public String eliminarLineas(@RequestParam int id){
        Linea linea = lineaService.getLineaById(id);
        lineaService.eliminar(linea);
        return "redirect:/pedido/lineas?id="+linea.getPedido().getId();
    }
    
    @RequestMapping("/lineas/nuevo")
    public ModelAndView nuevoLinea(@RequestParam int id){
        ModelAndView mav = new ModelAndView("pedido/lineas/edit");
        Pedido pedido = pedidoService.getPedidoById(id);
        List amigurumis = amigurumiService.listarTodos();
        Linea nuevaLinea = new Linea();
        pedido.agregarLinea(nuevaLinea);
        mav.addObject("amigurumis", amigurumis);
        mav.addObject("pedido", pedido);
        mav.addObject("linea", nuevaLinea);
        return mav;
    }
    
    @RequestMapping("/lineas/crear")
    public String crearLinea(@ModelAttribute Linea linea, BindingResult result) {
        if (result.hasErrors()) {
            return "redirect:nuevoLinea";
        }
        Pedido pedido = pedidoService.getPedidoById(linea.getPedidoId());
        pedido.agregarLinea(linea);
        linea.setPedido(pedido);
        lineaService.crear(linea);
        return "redirect:/pedido/lineas?id="+linea.getPedidoId();
    }    
    
    @RequestMapping("/lineas/editar")
    public ModelAndView editarLinea(@RequestParam int id){
        ModelAndView mav = new ModelAndView("pedido/lineas/edit");
        Linea linea = lineaService.getLineaById(id);
        Pedido pedido = linea.getPedido();
        linea.setAmigurumiId(linea.getAmigurumi().getId());
        List amigurumis = amigurumiService.listarTodos();        
        mav.addObject("pedido",pedido);
        mav.addObject("amigurumiId", linea.getAmigurumi().getId());
        mav.addObject("amigurumis", amigurumis);        
        mav.addObject("linea", linea);
        return mav;
    }
    
    @RequestMapping("/editar")
    public ModelAndView editar(@RequestParam int id){
        ModelAndView mav = new ModelAndView("pedido/edit");
        Pedido pedido = pedidoService.getPedidoById(id);
        List clientes = clienteService.listarTodos();
        pedido.setIdCliente(pedido.getCliente().getId());
        mav.addObject("pedido", pedido);
        mav.addObject("clientes", clientes);
        return mav;
    }
}